#include "personnage.h"
#include <stdio.h>

int vecteur[8][2]={
    {0,1},
    {1,1},
    {1,0},
    {1,-1},
    {0,-1},
    {-1,-1},
    {-1,0},
    {-1,1}
};

void persoInit(personnage * p, const terrain* t)
{
	int x = (t->dimX)/2;
	int y = (t->dimY)/2;
	if(!caseValable( x , y , t))
	{
		t->ter[x][y]=' ';
	}
	p->posX=x;
	p->posY=y;
	p->dir = 0;
	p->PV=2;
	p->nbMunition=100;
}




void deplacementAvant(personnage * p, const terrain* t)
{
	int i =getDirection(p);

	if(caseValable((p->posX+vecteur[i][0]),(p->posY+vecteur[i][1]),t))
	{
		p->posX += vecteur[i][0];
		p->posY += vecteur[i][1];
	}
}

void deplacementArriere(personnage * p, const terrain* t )
{
	int i =getDirection(p);

	if(caseValable((p->posX-vecteur[i][0]),(p->posY-vecteur[i][1]),t))
	{
		p->posX -= vecteur[i][0];
		p->posY -= vecteur[i][1];
	}
}

const int PgetPosX(const personnage * p)
{
	return p->posX;
}

const int PgetPosY(const personnage * p)
{
	return p->posY;
}

const int getDirection(const personnage* p)
{
    return p->dir;
}


const int PgetPV(const personnage * p)
{
	return p->PV;
}


void setDirection (personnage * p,int i)
{
    i=i%8;
    p->dir = i;
}

void setPVplus(personnage * p)
{
	if (p->PV!=0)
	p->PV+=1;
}

void setPVmoins(personnage * p)
{
	if (p->PV!=0)
	p->PV-=1;
}

void PsetPosition(personnage * p , terrain * t, const int x , const int y)
{
    assert(x>=0);
    assert(x<getDimX(t));
    assert(y>=0);
    assert(y<getDimY(t));

    if (caseValable(x,y,t))
    {
        p->posX=x;
        p->posY=y;
    }
}

/* ------------------------------------Balle------------------------------*/

void balleInit(balle *b, const terrain *t, const personnage *p)
{
        b->posX = PgetPosX(p);
        b->posY =PgetPosY(p);
        b->portee = 30;
        b->dir= getDirection(p);
}

void balleLibere(balle *b)
{
    b->posX = -1;
    b->posY = -1;
    b->portee = 0;
    b->dir=0;
}

void BsetPosition(balle *b, const terrain *t , const int x , const int y)
{
    assert(x>=0);
    assert(x<getDimX(t));
    assert(y>=0);
    assert(y<getDimY(t));

    if (caseValable(x,y,t))
    {
        b->posX=x;
        b->posY=y;
    }
}


void setPortee(balle *b, const terrain *t, const int PO)
{
    b->portee=PO;
}

int BgetPosX(const balle* b)
{
    return b->posX;
}

int BgetPosY(const balle* b)
{
    return b->posY;
}

int getPortee(const balle* b)
{
    return b->portee;
}

const int PgetNBmunition(const personnage * p)
{
	return p->nbMunition;
}

void setBalleTiree(personnage * p)
{
	if (p->nbMunition>0)
	p->nbMunition-=1;
}

